import router from "./router";
import store from "./store";
import { Message } from "element-ui";
import NProgress from "nprogress";
import "nprogress/nprogress.css";
//get-page-title文件主要是网站的标题，get-page-title通过依赖setting.js里的title变量修改网站标题
//如果需要更改网站的标题，可以直接到setting.js修改title属性
import getPageTitle from "./utils/get-page-title";
//NProgress是封装的进度条，基本不用动
NProgress.configure({ showSpinner: false });
//路由白名单列表，把路由添加到这个数组，不用登陆也可以访问
const whiteList = ["/login", "/home"];

router.beforeEach(async (to, from, next) => {
  // 请求路由时进度条开始
  NProgress.start();

  // set page title
  document.title = getPageTitle(to.meta.title);

  if (sessionStorage.getItem("userName")) {
    if (to.path === "/login") {
      // 直接跳转到首页，当然取决于你的路由重定向到哪里
      next({ path: "/" }); //一定要关闭进度条
      NProgress.done();
    } else {
      //如果已经有令牌的用户请求的不是登录页，是其他页面
      //就从Vuex里拿到用户的信息，这里也证明用户不是第一次登录了
      const hasGetUserInfo = store.getters.name;
      if (hasGetUserInfo) {
        //信息拿到后，用户请求哪就跳转哪
        next();
      } else {
        try {
          // 如果有令牌，但是没有用户信息，证明用户是第一次登录，通过Vuex设置用户信息
          // get user info
          // await store.dispatch('user/getInfo')
          //设置好了之后，依然可以请求哪就跳转哪
          next();
        } catch (error) {
          // 如果出错了，把令牌去掉，并让用户重新去到登录页面
          // remove token and go to login page to re-login
          await store.dispatch("user/resetToken");
          Message.error(error || "Has Error");
          next(`/login?redirect=${to.path}`);
          NProgress.done();
        }
      }
    }
  } else {
    /* has no token */

    if (whiteList.indexOf(to.path) !== -1) {
      // 不是-1就证明存在白名单里，不管你有没有令牌，都直接去到白名单路由对应的页面
      // in the free login whitelist, go directly
      next();
    } else {
      // 如果这个页面不在白名单里，直接跳转到登录页面
      // other pages that do not have permission to access are redirected to the login page.
      next(`/login?redirect=${to.path}`);
      NProgress.done();
    }
  }
});

router.afterEach(() => {
  //每次请求结束后都需要关闭进度条
  // finish progress bar
  NProgress.done();
});
